Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь!
🔍 Решение
Добавьте следующий сниппет в AppServiceProvider:
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log;
public function boot() { DB::listen(function ($query) { if (app()->bound('exception.logged')) { Log::channel('sql')->debug($query->sql, $query->bindings); } });
app()->singleton('exception.logged', function () { return true; });
🔐 Пояснение - При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception. - Если да — логируем SQL. - Используем отдельный лог-канал sql, чтобы не засорять основной laravel.log.
👉 Создайте в config/logging.php канал sql, направьте его в отдельный файл, например storage/logs/sql.log.
Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов.
Часто сталкиваюсь с ситуацией: ошибка 500 в проде, а что именно пошло не так — неясно. Особенно если это была ошибка в SQL-запросе. Логировать все SQL-запросы — слишком жирно и шумно. Но логировать только при исключениях — вот это огонь!
🔍 Решение
Добавьте следующий сниппет в AppServiceProvider:
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log;
public function boot() { DB::listen(function ($query) { if (app()->bound('exception.logged')) { Log::channel('sql')->debug($query->sql, $query->bindings); } });
app()->singleton('exception.logged', function () { return true; });
🔐 Пояснение - При каждом SQL-запросе мы проверяем, был ли в этом запросе выброшен exception. - Если да — логируем SQL. - Используем отдельный лог-канал sql, чтобы не засорять основной laravel.log.
👉 Создайте в config/logging.php канал sql, направьте его в отдельный файл, например storage/logs/sql.log.
Теперь, если в продакшене будет падение — вы увидите какой SQL-запрос был выполнен перед ошибкой. Это невероятно ускоряет диагностику багов.
Among the actives, Ascendas REIT sank 0.64 percent, while CapitaLand Integrated Commercial Trust plummeted 1.42 percent, City Developments plunged 1.12 percent, Dairy Farm International tumbled 0.86 percent, DBS Group skidded 0.68 percent, Genting Singapore retreated 0.67 percent, Hongkong Land climbed 1.30 percent, Mapletree Commercial Trust lost 0.47 percent, Mapletree Logistics Trust tanked 0.95 percent, Oversea-Chinese Banking Corporation dropped 0.61 percent, SATS rose 0.24 percent, SembCorp Industries shed 0.54 percent, Singapore Airlines surrendered 0.79 percent, Singapore Exchange slid 0.30 percent, Singapore Press Holdings declined 1.03 percent, Singapore Technologies Engineering dipped 0.26 percent, SingTel advanced 0.81 percent, United Overseas Bank fell 0.39 percent, Wilmar International eased 0.24 percent, Yangzijiang Shipbuilding jumped 1.42 percent and Keppel Corp, Thai Beverage, CapitaLand and Comfort DelGro were unchanged.
The seemingly negative pandemic effects and resource/product shortages are encouraging and allowing organizations to innovate and change.The news of cash-rich organizations getting ready for the post-Covid growth economy is a sign of more than capital spending plans. Cash provides a cushion for risk-taking and a tool for growth.